import XLSX from 'xlsx'

/**
 * 克隆对象
 * @param obj 
 * @returns 
 */
export const cloneObject = function(obj: any) {
	return JSON.parse(JSON.stringify(obj))
}

/**
 * 下载文件
 * @param url 
 * @param saveName 
 */
export const openDownloadDialog =  function(url: any, saveName: string){
	if(typeof url == 'object' && url instanceof Blob)
	{
		url = URL.createObjectURL(url); // 创建blob地址
	}
	var aLink = document.createElement('a');
	aLink.href = url;
	aLink.download = saveName || ''; // HTML5新增的属性，指定保存文件名，可以不要后缀，注意，file:///模式下不会生效
	var event;
	if(window.MouseEvent) event = new MouseEvent('click');
	else
	{
		event = document.createEvent('MouseEvents');
		event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
	}
	aLink.dispatchEvent(event);
}

/**
 * csv转sheet对象
 * @param csv 
 * @returns 
 */
// export const csv2sheet = function(csv: any) {
// 	var sheet = {} as any; // 将要生成的sheet
// 	csv = csv.split('\n');
// 	csv.forEach(function(row: any, i: number) {
// 		row = row.split(',');
// 		if(i == 0) sheet['!ref'] = 'A1:'+String.fromCharCode(65+row.length-1)+(csv.length-1);
// 		row.forEach(function(col: any, j: number) {
// 			sheet[String.fromCharCode(65+j)+(i+1)] = {v: col};
// 		});
// 	});
// 	return sheet;
// }

// 将一个sheet转成最终的excel文件的blob对象，然后利用URL.createObjectURL下载
export const sheet2blob = function(sheet: any, sheetName: string) {
	sheetName = sheetName || 'sheet1';
	var workbook = {
		SheetNames: [sheetName],
		Sheets: {} as any
	};
	workbook.Sheets[sheetName] = sheet;
	// 生成excel的配置项
	var wopts = {
		bookType: 'xlsx', // 要生成的文件类型
		bookSST: false, // 是否生成Shared String Table，官方解释是，如果开启生成速度会下降，但在低版本IOS设备上有更好的兼容性
		type: 'binary'
	};
	var wbout = XLSX.write(workbook, wopts as any);
	var blob = new Blob([s2ab(wbout)], {type:"application/octet-stream"});
	// 字符串转ArrayBuffer
	function s2ab(s: string) {
		var buf = new ArrayBuffer(s.length);
		var view = new Uint8Array(buf);
		for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
		return buf;
	}
	return blob;
}